package main

func main() {

}

/**
base字符串是从a到z 不停的循环
*/

/**
输入：s = "zab"
输出：6
解释：字符串 s 有六个子字符串 ("z", "a", "b", "za", "ab", and "zab")
在 base 中出现。
*/

/**
实际上就是s中有多少个连续的子串
因为连续的子串，在base串一定存在 ，特别注意za 是连续的
*/

/*
*
思考：假设s 为 zabpxyzab

	     只需要看连续最大的字符串，如 xyzab， 是最大连续，那么以b结尾的子串有5个
		 以a为结尾有4个
		 ...
*/
func findSubstringInWraproundString(s string) int {
	n := len(s)

	// 总共就26个字母
	dp := make([]int, 26)
	dp[s[0]-'a'] = 1

	var cur, pre byte
	len := 1
	for i := 1; i < n; i++ {
		// 当前字母
		cur = s[i]
		// 上一个字母
		pre = s[i-1]
		// 2种情况可以认为是连续的： 当前字母是a，上一个是z；上一个字母+1是当前字母
		if (pre == 'z' && cur == 'a') || pre+1 == cur {
			len++
		} else {
			// 不连续就只有他自身一个
			len = 1
		}
		dp[cur-'a'] = max(len, dp[cur-'a'])
	}
	var m int
	for _, v := range dp {
		m += v
	}
	return m
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
